#ifndef SYN_ATTACKER_H
#define SYN_ATTACKER_H

#include <attacker.h>
#include <attackerMessage.h>
#include <attackTargetMessage.h>

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/ip_icmp.h>
#include <ctype.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

namespace Model{

  struct pseudohdr
  {
    struct in_addr srcAddr;
    struct in_addr dstAddr;
    u_char zero;
    u_char protocol;
    u_short tcpLength;
    struct tcphdr tcpheader;
  };
  
  class SynAttacker : public Attacker
  {
    u_short CRCChecksum(u_short * data,u_short length);
  protected:
    virtual bool ProcessFunction();

  public:
    SynAttacker(std::map<std::string,model *> *models);
    virtual ~SynAttacker(){}
  };

}

#endif
